
package edu.uoc.tdp.servidor.impl.conexio;

import edu.uoc.tdp.beans.conexio.Administrador;
import edu.uoc.tdp.beans.conexio.Estudiant;
import edu.uoc.tdp.beans.conexio.ResponsableEvents;
import edu.uoc.tdp.beans.conexio.Usuari;
import edu.uoc.tdp.common.EOlympicsException;
import edu.uoc.tdp.common.RemotConexioInterface;
import edu.uoc.tdp.bbdd.GestorDiscConnexio;
import edu.uoc.tdp.common.EOlympicsExceptionConnexio;
import edu.uoc.tdp.servidor.bbdd.conexio.GestorAcces;
import edu.uoc.tdp.servidor.bbdd.conexio.GestorUsuaris;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

/**
 * Classe que implementa l'interfície RemotConexioInterface
 * Es definiran tots els mètodes que necessitem per fer servir a la
 * capa de presentació. Per accedir a BBDD sempre haurem de passar per 
 * la classe GestorXXX corresponent
 * @author Grup TDP 1X4J
 */
public class RemotConexioImpl extends UnicastRemoteObject 
                           implements RemotConexioInterface, Serializable    
{

    private static final long serialVersionUID = 1L;
    private GestorDiscConnexio gestorBD;

    /**
     * Constructor de la clase<br> Crea una conexió a la Base de Dades
     *
     * @exception RemoteException
     * @exception EOlympicsException
     * @exception EOlympicsExceptionConnexio
     */
    public RemotConexioImpl() throws RemoteException, EOlympicsException,
            EOlympicsExceptionConnexio {
        super();
        gestorBD = new GestorDiscConnexio();
        gestorBD.obreConnexioBD();
    }

    /**
     * @see RemotConexioInterface#getUsuari(java.lang.Int)
     */
    @Override
    public Usuari getUsuari(int IdUsu) throws RemoteException, EOlympicsException,
            EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris =
                new GestorUsuaris(gestorBD);

        return gestorUsuaris.obtenirUsuari(IdUsu);
    }

    /**
     * @see RemotConexioInterface#getUsuari(java.lang.String, java.lang.String)
     */
    @Override
    public Usuari getUsuari(String pIdUsuari, String pPwd) throws RemoteException, EOlympicsException,
            EOlympicsExceptionConnexio {
        GestorAcces gestorUsuaris = new GestorAcces(gestorBD);

        return gestorUsuaris.obtenirUsuari(pIdUsuari, pPwd);
    }

    /**
     * @see RemotConexioInterface#getAdministrador(java.lang.Int)
     */
    @Override
    public Administrador getAdministrador(int IdAdm) throws RemoteException, EOlympicsException,
            EOlympicsExceptionConnexio {
        GestorUsuaris gestorAdministradors = new GestorUsuaris(gestorBD);

        return gestorAdministradors.obtenirAdministrador(IdAdm);
    }

    /**
     * @see RemotConexioInterface#getAdministrador(java.lang.String,
     * java.lang.String)
     */
    @Override
    public Administrador getAdministrador(String pIdAdmin, String pPwd) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorAcces gestorAdministradors = new GestorAcces(gestorBD);

        return gestorAdministradors.obtenirAdministrador(pIdAdmin, pPwd);
    }

    /**
     * @see RemotConexioInterface#getResponsableEvents(java.lang.Int)
     */
    @Override
    public ResponsableEvents getResponsableEvents(int IdREv) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorResponsablesEvents = new GestorUsuaris(gestorBD);

        return gestorResponsablesEvents.obtenirResponsableEvents(IdREv);
    }

    /**
     * @see RemotConexioInterface#getResponsableEvents(java.lang.String,
     * java.lang.String)
     */
    @Override
    public ResponsableEvents getResponsableEvents(String pIdRespEv, String pPwd) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorAcces gestorResponsablesEvents = new GestorAcces(gestorBD);

        return gestorResponsablesEvents.obtenirResponsableEvents(pIdRespEv, pPwd);
    }

    /**
     * @see RemotConexioInterface#getEstudiant(java.lang.Int)
     */
    @Override
    public Estudiant getEstudiant(int IdEst) throws RemoteException, EOlympicsException,
            EOlympicsExceptionConnexio {
        GestorUsuaris gestorEstudiants = new GestorUsuaris(gestorBD);

        return gestorEstudiants.obtenirEstudiant(IdEst);
    }

    /**
     * @see RemotConexioInterface#getEstudiant(java.lang.String,
     * java.lang.String)
     */
    @Override
    public Estudiant getEstudiant(String pIdEst, String pPwd) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorAcces gestorEstudiants = new GestorAcces(gestorBD);

        return gestorEstudiants.obtenirEstudiant(pIdEst, pPwd);
    }

    /**
     * @see RemotConexioInterface#getLlistaUsuaris(java.lang.String,
     * java.lang.String, java.lang.String)
     */
    @Override
    public List<Usuari> getLlistaUsuaris(String nom, String cognoms, String ident) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);

        return gestorUsuaris.obtenirLlistaUsuaris(nom, cognoms, ident);
    }

    /**
     * @see RemotConexioInterface#setBloqueigUsuari(java.lang.Int)
     */
    @Override
    public boolean setBloqueigUsuari(int pIdIntern) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorAcces gestorUsuaris = new GestorAcces(gestorBD);
        return gestorUsuaris.bloquejarUsuari(pIdIntern);
    }

    /**
     * @see RemotConexioInterface#setAltaAdministrador(java.lang.Int)
     */
    @Override
    public boolean setAltaAdministrador(Usuari usu, int idAdmin) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.inserirAdministrador(usu, idAdmin);
    }

    /**
     * @see RemotConexioInterface#setAltaResponsableEvents(java.lang.Int)
     */
    @Override
    public boolean setAltaResponsableEvents(Usuari usu, int idAdmin) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.inserirResponsableEvents(usu, idAdmin);
    }

    /**
     * @see RemotConexioInterface#setAltaEstudiant(java.lang.String, java.lang.Int)
     */
    @Override
    public boolean setAltaEstudiant(Usuari usu, String nomUniversitat, int idAdmin) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.inserirEstudiant(usu, nomUniversitat, idAdmin);
    }

    /**
     * @see RemotConexioInterface#setUpdateUsuari(java.lang.Int)
     */
    @Override
    public boolean setUpdateUsuari(Usuari usu, int idAdmin) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.actualitzaUsuari(usu, idAdmin);
    }

    /**
     * @see RemotConexioInterface#setUpdateEstudiant(java.lang.String, java.lang.Int)
     */
    @Override
    public boolean setUpdateEstudiant(Usuari usu, String nomUniversitat, int idAdmin) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.actualitzaEstudiant(usu, nomUniversitat, idAdmin);
    }

    /**
     * @see RemotConexioInterface#setBorratUsuari(java.lang.Int, java.lang.Int)
     */
    @Override
    public boolean setBorratUsuari(int idInternUsuari, int idAdmin) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.esborraUsuari(idInternUsuari, idAdmin);
    }

    /**
     * @see RemotConexioInterface#esDocumentRepetit(java.lang.Int, java.lang.Int)
     */
    @Override
    public boolean esDocumentRepetit(String document, int IdUsu) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.documentRepetit(document, IdUsu);
    }
    
    /**
     * @see RemotConexioInterface#esIdentificadorRepetit(java.lang.String, java.lang.Int)
     */
    @Override
    public boolean esIdentificadorRepetit(String idUsuari, int IdIntUsu) throws RemoteException,
            EOlympicsException, EOlympicsExceptionConnexio {
        GestorUsuaris gestorUsuaris = new GestorUsuaris(gestorBD);
        return gestorUsuaris.identificadorRepetit(idUsuari, IdIntUsu);
    }
}
